<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script type="text/javascript" src="../js/underscore.js"></script>
  <script type="text/javascript">
		//模拟js 通过字符串执行函数
		_.mixin({
			/**基于字符串获取 函数名称和参数对象 //不准持有无效的引号
			 * 示例  test(1,5,6,7);
			 * @params str  字符串函数
			 *
			 */
			getFunctionObj: function (str) {

				let functionObj = {
					functionName: "",
					functionParams: []
				};

				if (_.isString(str)) {
					if (str.indexOf("(") !== -1 && str.indexOf(")") !== -1) {
						let arr = str.split("(");
						functionObj.functionName = arr[0];
						arr = arr[1].split(")");
						if (!_.isEmpty(arr[0])) {
							functionObj.functionParams = arr[0].split(",");
						}
					} else { //兼容未命名() 的函数
						functionObj.functionName = str;
					}
				}
				return functionObj;
			},
			/* 基于字符串获取当前window的对象函数对象
       * @params str  字符串函数
       * @parmas  falg   默认false,
       * true 立即调用这个函数,false 返回函数对象及其函数参数
       */
			getFunction: function (str, falg) {
				if (_.isString(str)) {
					let functionObj = _.getFunctionObj(str);
					let strFunction = functionObj.functionName;
					if (!_.isEmpty(strFunction)) {
						let arr = strFunction.split(".");
						strFunction = window[arr[0]];
						for (let i = 1, len = arr.length; i < len; i++) {
							if (!strFunction && !_.isFunction(strFunction) && !_.isObject(strFunction)) {
								return null;
							}
							strFunction = strFunction[arr[i]];
						}
						if (_.isFunction(strFunction)) {
							if (falg) {
								strFunction.apply(strFunction, functionObj.functionParams); //测试是否是方法可以测试出来
							}
							functionObj.fun = strFunction;
							return functionObj;
						}
					}
					return null;
				}
				return str;
			}
		});


		function fun(a, b, c) {
			return a + b + c;

      // console.log(a, b, c);
		}

		let obj = _.getFunction("fun(2, 3, 4)", true);


  </script>
</head>
<body>

</body>
</html>
